package geradatawarehouse.dao.postgres;

import geradatawarehouse.bean.AlunoEJA;

import java.io.IOException;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;

public class AlunoEJAPostgresDAO extends AbstractAlunoPostgresDAO<AlunoEJA> {
	private static final String DELETE_ANO_SEM_QUERY = "delete from aluno_eja where ano_sem = ";

	public AlunoEJAPostgresDAO(final int anoSem) throws IOException {
		super(anoSem, AlunoEJAPostgresDAO.DELETE_ANO_SEM_QUERY);
	}

	@Override
	public void record(final List<AlunoEJA> lista) throws SQLException {
		final StringBuilder sb = new StringBuilder();

		sb.append("INSERT INTO aluno_eja("
				+ "escola_online, ano_sem, cre, nome_escola, turno, cod_aluno, "
				+ "nome_aluno, dt_nasc_aluno, nome_mae, cep_aluno, sexo_masculino, "
				+ "tel_mae_aluno, cod_escola, num_chamada, logr_aluno, end_aluno, "
				+ "bairro_aluno, cidade_aluno, uf_aluno, segmento, semestre)"
				+ "VALUES ");
		for (final AlunoEJA a : lista) {
			sb.append("(");
			sb.append(this.generateInsertBooleanValue(a.getEscolaOnline()));
			sb.append(", ");
			sb.append(a.getAnoSem());
			sb.append(", '");
			sb.append(this.escape(a.getCre()));
			sb.append("', '");
			sb.append(this.escape(a.getNomeEscola()));
			sb.append("', '");
			sb.append(a.getTurno());
			sb.append("', '");
			sb.append(this.escape(a.getCodAluno()));
			sb.append("', '");
			sb.append(this.escape(a.getNomeAluno()));
			sb.append("', ");
			sb.append(this.generateInsertDateValue(a.getDtNascAluno()));
			sb.append(", '");
			sb.append(this.escape(a.getNomeMae()));
			sb.append("', '");
			sb.append(this.escape(a.getCepAluno()));
			sb.append("', ");
			sb.append(this.generateInsertBooleanValue(a.getIsMasculino()));
			sb.append(", '");
			sb.append(this.escape(a.getTelMaeAluno()));
			sb.append("', '");
			sb.append(this.escape(a.getCodEscola()));
			sb.append("', ");
			sb.append(a.getNumChamada());
			sb.append(", '");
			sb.append(this.escape(a.getLogrAluno()));
			sb.append("', '");
			sb.append(this.escape(a.getEndAluno()));
			sb.append("', '");
			sb.append(this.escape(a.getBairroAluno()));
			sb.append("', '");
			sb.append(this.escape(a.getCidadeAluno()));
			sb.append("', '");
			sb.append(this.escape(a.getUfAluno()));
			sb.append("', ");
			sb.append(a.getSegmento());
			sb.append(", ");
			sb.append(a.getSemestre());
			sb.append(")");
			sb.append(", ");
		}

		String query = sb.toString();

		query = query.substring(0, query.length() - ", ".length());

		try {
			final Statement smt = this.conn.createStatement();
			smt.executeUpdate(query);
		} catch (final SQLException e) {
			this.treatTransactionException();
			throw e;
		}
	}
}
